package com.fary.beans.factory.config;

import com.fary.core.SpringException;
import com.fary.beans.factory.ListableBeanFactory;


import java.util.Iterator;

/**
 * 继承接口 ListableBeanFactory
 * 继承接口 AutowireCapableBeanFactory
 * 继承接口 ConfigurableBeanFactory（继承 HierarchicalBeanFactory、SingletonBeanRegistry）
 */
public interface ConfigurableListableBeanFactory extends ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory {

	void ignoreDependencyType(Class<?> type);

	void ignoreDependencyInterface(Class<?> ifc);

	void registerResolvableDependency(Class<?> dependencyType, Object autowiredValue);

	boolean isAutowireCandidate(String beanName, DependencyDescriptor descriptor) throws SpringException;

	BeanDefinition getBeanDefinition(String beanName) throws SpringException;

	Iterator<String> getBeanNamesIterator();

	void clearMetadataCache();

	void freezeConfiguration();

	boolean isConfigurationFrozen();

	void preInstantiateSingletons() throws SpringException;

}